home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d18 / probots.arc / MT_FUJI.PR < prev    next >
Text File  |  1991-04-28  |  3KB  |  99 lines

  1.   PROCEDURE MT_FUJI;
  2.  
  3.     { Fuji-yama is the most famous mountain in Japan. }
  4.     { Based on a C-Robot by Hortense Endoh }
  5.  
  6.   VAR
  7.     dir, deg, Range, spd, last_D : Integer;
  8.  
  9.     FUNCTION Hurt  : Boolean;
  10.       {Checks if robot has incurred any new damage}
  11.       {Added by David Malmberg}
  12.     VAR Curr_D     : Integer;
  13.       Answer         : Boolean;
  14.     BEGIN
  15.       Curr_D := damage;
  16.       IF Curr_D > last_D
  17.       THEN Answer := True
  18.       ELSE Answer := False;
  19.       last_D := Curr_D;
  20.       IF Answer THEN
  21.         BEGIN
  22.           drive(dir, 0); {slow down}
  23.           WHILE speed >= 50 DO {nothing - keep slowing down} ;
  24.           dir := dir+180; {reverse direction and run away}
  25.           drive(dir, spd)
  26.         END;
  27.       Hurt := Answer;
  28.     END;
  29.  
  30.     PROCEDURE shoot;
  31.     BEGIN
  32.       drive(dir, spd);
  33.       Range := scan(deg, 10);
  34.       IF (Range > 40)
  35.       THEN cannon(deg, Range)
  36.       ELSE
  37.         BEGIN
  38.           deg := deg+20;
  39.           Range := scan(deg, 10);
  40.           IF (Range = 0) THEN
  41.             BEGIN
  42.               deg := deg-40;
  43.               Range := scan(deg, 10);
  44.               IF (Range = 0) THEN
  45.                 BEGIN
  46.                   deg := deg+60;
  47.                   Range := scan(deg, 10);
  48.                   WHILE (Range = 0) AND (NOT Hurt) DO
  49.                     BEGIN
  50.                       deg := deg+20;
  51.                       Range := scan(deg, 10);
  52.                     END;
  53.                 END;
  54.             END;
  55.           IF (Range > 40) THEN cannon(deg, Range);
  56.         END;
  57.     END; {shoot}
  58.  
  59.  
  60.     PROCEDURE init_proc;
  61.     BEGIN
  62.       last_D := damage;
  63.       dir := 270;
  64.       spd := 100;
  65.       WHILE (loc_y > 150) AND (NOT Hurt) DO shoot;
  66.       dir := 90;
  67.       shoot;
  68.       shoot;
  69.       shoot;
  70.       dir := 180;
  71.       WHILE (loc_x > 100) AND (NOT Hurt) DO shoot;
  72.       dir := 0;
  73.       WHILE (loc_x < 900) AND (NOT Hurt) DO shoot;
  74.     END; {init-proc}
  75.  
  76.  
  77.   BEGIN {Mt_Fuji Main}
  78.     init_proc;
  79.     REPEAT
  80.       dir := 105; WHILE (loc_y < 900) AND (NOT Hurt) DO shoot;
  81.       dir := 255; shoot;
  82.       dir := 0; WHILE (loc_x < 550) AND (NOT Hurt) DO shoot;
  83.       dir := 180; shoot;
  84.       dir := 285; WHILE (loc_y > 100) AND (NOT Hurt) DO shoot;
  85.       dir := 105; shoot;
  86.       dir := 0; WHILE (loc_x < 900) AND (NOT Hurt) DO shoot;
  87.       dir := 180; shoot;
  88.       dir := 105; WHILE (loc_y < 900) AND (NOT Hurt) DO shoot;
  89.       dir := 285; shoot;
  90.       dir := 180; WHILE (loc_x > 450) AND (NOT Hurt) DO shoot;
  91.       dir := 0; shoot;
  92.       dir := 255; WHILE (loc_y > 100) AND (NOT Hurt) DO shoot;
  93.       dir := 75; shoot;
  94.       dir := 180; WHILE (loc_x > 100) AND (NOT Hurt) DO shoot;
  95.       dir := 0; shoot;
  96.     UNTIL Dead OR Winner;
  97.   END; {Mt_Fuji Main}
  98.  
  99.